package gui.hodnoceni;


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.util.List;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import utils.Nastroje;

public class HodnoceniPanel extends JPanel {

    private static final long serialVersionUID = 1L;
    private short uspesnost;
    private List<String> chyby;
    private int pocetSpravne;


    public HodnoceniPanel(int pocetSpravne, int pocetSpatne, List<String> chyby) {
	this.pocetSpravne = pocetSpravne;
	// vypocet uspesnosti
	double d = ((double) pocetSpatne / (double) pocetSpravne);
	uspesnost = (short) (100 - 100 * d);
	
	this.chyby = chyby;
	
	// vytvoreni komponent
	createComponents(pocetSpravne, pocetSpatne);
    }


    private void createComponents(int pocetSpravne, int pocetSpatne) {
	this.setBackground(Nastroje.cZluta);
	this.setLayout(new GridBagLayout());
	GridBagConstraints c = new GridBagConstraints();
	c.insets = new Insets(30, 0, 0, 0); // top padding
	c.gridx = 0;
	
	if (uspesnost >= 90) {
	    c.gridy = 0;
	    this.add(getLabel(Nastroje.fVelky, "Gratuluji !!!"), c);
	   
	    c.gridy = 1;
	    this.add(getLabel(Nastroje.fVelky, "Dnes jsi ve formě."), c);
	   
	    c.gridy = 2;
	    this.add(getLabel(Nastroje.fMega, "1"), c);
	} else if (uspesnost >= 70) {
	    c.gridy = 0;
	    this.add(getLabel(Nastroje.fVetsi, "Občas uděláš chybu."), c);
	   
	    c.gridy = 1;
	    this.add(getLabel(Nastroje.fMega, "2"), c);
	} else if (uspesnost >= 50) {
	    c.gridy = 0;
	    this.add(getLabel(Nastroje.fVetsi, "Potřebuješ víc opakovat."), c);
	   
	    c.gridy = 1;
	    this.add(getLabel(Nastroje.fMega, "3"), c);
	} else {
	    c.gridy = 0;
	    this.add(getLabel(Nastroje.fVelky, "Dnes se nedařilo."), c);
	    
	    c.gridy = 1;
	    this.add(getLabel(Nastroje.fVetsi, "Měl by ses víc učit."), c);
	}
	JButton btnChyby = new JButton(new AbstractAction("Zobrazit chyby") {

	    private static final long serialVersionUID = 1L;


	    @Override
	    public void actionPerformed(ActionEvent arg0) {
		zobrazitChyby();
	    }
	});
	
	if (!chyby.isEmpty()) {
	    c.gridy = 10; // proste uplne dolu
	    this.add(btnChyby, c);
	}
    }
    
    /**
     * Metoda vraci label s nastavenym textem a fontem
     * @param f font
     * @param s text
     * @return label
     */
    private JLabel getLabel(Font f, String s) {
	JLabel l = new JLabel();
	l.setFont(f);
	l.setText(s);
	return l;
    }
    
    
    /**
     * Zobrazi dialog s chybami
     */
    private void zobrazitChyby() {
	ChybovyDialog chybovyDialog = new ChybovyDialog(chyby, pocetSpravne);
	chybovyDialog.setVisible(true);
    }
    
    
    /**
     * Dialog pro zobrazeni chyb
     * @author schovjan
     */
    class ChybovyDialog extends JDialog {

	private static final long serialVersionUID = 1L;


	public ChybovyDialog(List<String> chyby, int pocetSpravne) {
	    this.setLayout(new BorderLayout());
	    JTextArea ta = new JTextArea(chyby.toString());
	    String chybyS = "";
	    for(String s : chyby) {
		chybyS += "  " + s + "\n";
	    }
	    ta.setText(chybyS);
	    ta.setFont(Nastroje.fStredni);
	    ta.setEditable(false);
	    JScrollPane scroll = new JScrollPane(ta);
	    this.add(scroll, BorderLayout.CENTER);
	    
	    JButton btnZavrit = new JButton(new AbstractAction("Zavřít") {
	        
		private static final long serialVersionUID = 1L;

		@Override
	        public void actionPerformed(ActionEvent arg0) {
		    setVisible(false);
	        }
	    });
	    this.add(btnZavrit, BorderLayout.SOUTH);
	    
	    this.setSize(new Dimension(250, 300));
	    this.setTitle("Špatné odpovědi (" + chyby.size() + "/" +pocetSpravne + ")");
	    this.setModal(true);
	    this.setLocationRelativeTo(null);
	}
    }
}
